#include "FontManager.h"
#include "Base/Logger.h"

FontManager FontManager::singleton;

sf::Font *FontManager::GetFont(const std::string &ImageLink)
{
    sf::Font *ImgTemp;

    if(!SearchImage(ImageLink, ImgTemp))
    {
        ImgTemp = CreateImage(ImageLink);
		BPL::Logger::log(("Font '" + ImageLink + "'added").c_str());
    }

    return ImgTemp;
}

void FontManager::DeleteImage(sf::Font &Img)
{
    std::map<std::string, sf::Font*>::iterator it;

    for(it = Images.begin(); it != Images.end(); it++)
    {
        if(it->second == &Img)
        {
            delete &Img;
            Images.erase(it);
            break;
        }
    }
}

void FontManager::DeleteImage(const std::string& ImageLink)
{
    std::map<std::string, sf::Font*>::iterator it;

    it = Images.find(ImageLink);

    if(it != Images.end())
    {
        if(it->second != NULL)
        {
            delete (it->second);
            Images.erase(it);
        }
    }
}

bool FontManager::SearchImage(const std::string &ImageLink, sf::Font* &ImgTemp)
{
    std::map<std::string, sf::Font*>::iterator it;

    it = Images.find(ImageLink);

    if(it == Images.end())
    {
        return false;
    }
    else
    {
        ImgTemp = it->second;
    }

    return true;
}

sf::Font *FontManager::CreateImage(const std::string &ImageLink)
{
    sf::Font *ImgTemp = new sf::Font();
    if(ImgTemp->loadFromFile(ImageLink))
    {
		//ImgTemp->SetSmooth(false);
        Images.insert(std::make_pair(ImageLink, ImgTemp));
        return ImgTemp;
    }
    else
    {
        delete ImgTemp;
    }

    return NULL;
}

FontManager::FontManager()
{

}

FontManager::~FontManager()
{
    std::map<std::string, sf::Font*>::iterator it;
    for(it = Images.begin(); it != Images.end(); it++)
    {
        delete it->second;
    }
}

FontManager::FontManager(const FontManager&)
{

}

FontManager& FontManager::operator= (const FontManager&)
{
	return *this;
}


